/***
 * JSON.stringify(p1,p2,p3)
 * p1 要转换成字符串的JSON对象。
 * p2 对转换的对象属性进行操作，传数组 [k1,k2,k3...]可以将数组中的对应属性转化成JSON串内容，不存在的key不转换
 *    传的是function，可以对每个key对应的value进行修改，修改只会对JSON字符串生效，不影响原来的value。
 * p3 让JSON字符串进行格式化，并且控制格式化的缩进距离。
 */
let person = {
    name:'seven',
    age:18,
    sex:'man'
}

//基本用法
let result = JSON.stringify(person)
console.log(result)//{"name":"seven","age":18,"sex":"man"}

//指定将对象的哪些数据行转换成字符串
let result2 = JSON.stringify(person,['name','age'])
console.log(result2) //{"name":"seven","age":18}

/*
    传入过滤函数,函数可以对每个key对应的value执行一些操作
    例如把年龄加1
 */
let result3 = JSON.stringify(person,function (key, val) {
    if(key == 'age'){
        return val+1; //val不变，JSON窜的值加1
        //return undefined;//返回undefined的话，在JSON窜中不存在该属性
    }
    return val;
})
console.log(result3)

person = {
    name:'seven',
    age:18,
    sex:'man',
    skill:[
        'Java',
        'JS',
        'HTML',
        'Vue',
    ]
}
//将JSON字符串进行格式化和缩进
let result4 =JSON.stringify(person,null,3)
console.log(result4)

//设置对象转JSON字符串的自定义返回内容
person = {
    name:'seven',
    age:18,
    sex:'man',
    skill:[
        'Java',
        'JS',
        'HTML',
        'Vue',
    ],
    toJSON(){
        return '不允许转成JSON字符串';
       //return this.name;
    }
}

let result5 = JSON.stringify(person)
console.log(result5)


/***
 * JSON.parse(p1,p2)
 * p1 要转成JSON对象的JSON字符串
 * p2 将转换成JSON对象的每个属性值进行操作
 * @type {any}
 */

// 基本用法
let result6 = JSON.parse("{\"name\":\"seven\",\"age\":18,\"sex\":\"man\"}")
console.log(result6)

//对转换的属性进行操作
let result7 = JSON.parse("{\"name\":\"seven\",\"age\":18,\"sex\":\"man\"}",function (key,val) {
    if(key == 'name'){
        return val+'_Spades';
    }
    return val;
})
console.log(result7)

